package com.lw.common.utils;

import cma.music.RetArray2D;
import cma.music.client.DataQueryClient;
import com.alibaba.fastjson.JSONObject;
import com.lw.common.config.IWater;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import java.util.HashMap;

/**
 *  这里是天擎系统的api回调入口
 *  by lw on 2025年2月20日11:25:34
 */
@Component
public class CallApiWrapperUtils {


    @Resource
    IWater iWater;

    /**
     * 气象接口封装
     *
     * @param method key 方法接口名
     * @param params 参数
     * @return 气象接口返回结果
     * by lw on 时间😊
     */
    public String callApiWrapperStr(String method, HashMap<String, String> params) {
        /* 2.4 返回对象 */
        RetArray2D retArray2D = new RetArray2D();
        /* 3. 调用接口 */
        DataQueryClient client = new DataQueryClient();
        try {
            //初始化接口服务连接资源
            client.initResources();
            //调用接口
            int rst = client.callAPI_to_array2D(iWater.getMusicUserName(), iWater.getMusicPassword(), method, params, retArray2D);
            //输出结果
            if (rst == 0) { //正常返回
               return    JSONObject.toJSONString(retArray2D);
            } else { //异常返回
                System.out.println("[error] StaElemSearchAPI_CLIB_callAPI_to_array2D.");
                System.out.printf("\treturn code: %d. \n", rst);
                System.out.printf("\terror message: %s.\n", retArray2D.request.errorMessage);
                return  retArray2D.request.errorMessage;
            }
        } catch (Exception e) {
            //异常输出
            e.printStackTrace();
        } finally {
            //释放接口服务连接资源
            client.destroyResources();
        }
        return null;
    }

    /**
     * 气象接口封装
     *
     * @param method key 方法接口名
     * @param params 参数
     * @return 气象接口返回结果
     * by lw on 时间😊
     */
    public ResultVo<? extends Object> callApiWrapper(String method, HashMap<String, String> params) {
        /* 2.4 返回对象 */
        RetArray2D retArray2D = new RetArray2D();
        /* 3. 调用接口 */
        DataQueryClient client = new DataQueryClient();
        try {
            //初始化接口服务连接资源
            client.initResources();
            //调用接口
            int rst = client.callAPI_to_array2D(iWater.getMusicUserName(), iWater.getMusicPassword(), method, params, retArray2D);
            //输出结果
            if (rst == 0) { //正常返回
                if (iWater.isEnableEncrypt()) {
                    return ResultVo.success(Utils.encryptHex(JSONObject.toJSONString(retArray2D)));
                } else {
                    return ResultVo.success(retArray2D);
                }
            } else { //异常返回
                System.out.println("[error] StaElemSearchAPI_CLIB_callAPI_to_array2D.");
                System.out.printf("\treturn code: %d. \n", rst);
                System.out.printf("\terror message: %s.\n", retArray2D.request.errorMessage);
                return ResultVo.error(retArray2D.request.errorMessage);
            }
        } catch (Exception e) {
            //异常输出
            e.printStackTrace();
        } finally {
            //释放接口服务连接资源
            client.destroyResources();
        }
        return ResultVo.success("ok");
    }


    /**
     * 气象接口封装，不加密接口版本
     *
     * @param method key 方法接口名
     * @param params 参数
     * @return 气象接口返回结果
     * by lw on 时间😊
     */
    public ResultVo<? extends Object> callApiWrapperNoEncrypt(String method, HashMap<String, String> params) {
        /* 2.4 返回对象 */
        RetArray2D retArray2D = new RetArray2D();
        /* 3. 调用接口 */
        DataQueryClient client = new DataQueryClient();
        try {
            //初始化接口服务连接资源
            client.initResources();
            //调用接口
            int rst = client.callAPI_to_array2D(iWater.getMusicUserName(), iWater.getMusicPassword(), method, params, retArray2D);
            //输出结果
            if (rst == 0) { //正常返回
                return ResultVo.success(retArray2D);
            } else { //异常返回
                System.out.println("[error] StaElemSearchAPI_CLIB_callAPI_to_array2D.");
                System.out.printf("\treturn code: %d. \n", rst);
                System.out.printf("\terror message: %s.\n", retArray2D.request.errorMessage);
                return ResultVo.error(retArray2D.request.errorMessage);
            }
        } catch (Exception e) {
            //异常输出
            e.printStackTrace();
        } finally {
            //释放接口服务连接资源
            client.destroyResources();
        }
        return ResultVo.success("ok");
    }
}
